home *** CD-ROM | disk | FTP | other *** search
/ SPACE 2 / SPACE - Library 2 - Volume 1.iso / program / 561 / prolog / toydemos < prev    next >
Text File  |  1991-09-08  |  3KB  |  82 lines

  1.  
  2. % Demos für TOY Prolog, 19jun86 JJK
  3.  
  4. % Grafik-Demonstration (Aufruf von VDI-Funktionen)
  5.  
  6. % Aufruf mit : mmove
  7. % Abbruch mit ShiftAltHelp
  8.  
  9. mmove :- window, mmove(0, 0).
  10.  
  11. mmove(OldX, OldY) :- wait(OldX, OldY, NewX, NewY), erase(OldX, OldY),
  12.       draw(NewX, NewY), mmove(NewX, NewY).
  13.  
  14. wait(OX, OY, NX, NY) :- repeat, grf_mse_state(_,NX,NY), not (OX=NX, OY=NY), !.
  15.  
  16. erase(X, Y) :- sum(X, 32, X1), sum(Y, 32, Y1), grf_box(X, Y, X1, Y1).
  17.  
  18. draw(X, Y) :- sum(X, 32, X1), sum(Y, 32, Y1), grf_rbox(X, Y, X1, Y1).
  19.  
  20. window :- grf_mode, grf_mse_hide, grf_clip(0, 0, 0, 0, 0), grf_f_type(2),
  21.       grf_f_style(4), grf_box(0, 0, 639, 399), grf_f_type(0),
  22.       grf_bar(100, 100, 540, 300), grf_clip(1, 101, 101, 539, 299).
  23.  
  24.  
  25. % Zugriff auf das Diskettendirectory
  26.  
  27. % Aufruf mit : directory
  28. %       oder : directory( Pfadname )
  29.  
  30. % Directory mit Angabe des Pfadnamens :
  31.  
  32. directory(PName) :- disk_dir(OldPName),   % alten Pfadnamen in OldPName retten
  33.                     disk_dir(PName),      % neuen Pfadnamen aktivieren
  34.                     directory,            % Hauptfunktion aufrufen
  35.                     disk_dir(OldPName).   % alten Pfadnamen wiederherstellen
  36.  
  37. % Directory vom aktuellen Pfad :
  38.  
  39. directory :-   display('Directory of '), disk_dir(X), display(X), nl,
  40.                % Pfadnamen anzeigen
  41.  
  42.                disk_search(*.*, 255, FirstName, FirstAttr),
  43.                % ersten Dateinamen suchen
  44.  
  45.                directory(FirstName, FirstAttr).
  46.                % ersten Dateinamen anzeigen und weitersuchen
  47.  
  48. % Hilfsfunktion : aktuelle Datei anzeigen, nächste Datei suchen;
  49. %                 rekursiver Aufruf für die nächste Datei, bis keine mehr
  50. %                 gefunden wird.
  51.  
  52. directory(Name, Attr) :-   namattr(Name, Attr),       % anzeigen aktuelle Datei
  53.                            disk_search(NName, NAttr), % nächste Datei suchen
  54.                            directory(NName, NAttr).   % und weiter geht's
  55.  
  56. % falls keine Datei mehr da ist, schlägt disk_search/2 fehl, und dann ...
  57.  
  58. directory(_, _) :- nl.  % Zum Schluß noch eine Leerzeile
  59.  
  60. % Hilfsfunktion : aktuellen Dateinamen und Attribut anzeigen
  61.  
  62. namattr(Name, Attr) :-  display(Name),       % Namen anzeigen
  63.                         pname(Name, String), % wieviele Zeichen hat der Name ?
  64.                         length(String, Length),
  65.                         Tab is 16 - Length,  % Tabulator berechnen
  66.                         tab(Tab),            % genausoviele Leerzeichen ausgeben
  67.                         display(Attr), nl.   % Attribut anzeigen, fertig.
  68.  
  69. % Und jetzt noch eine kleine Tabulatorfunktion :
  70.  
  71. tab(0) :- !.         % 0 Leerzeichen braucht man nicht auszugeben.
  72. tab(N) :- wch(' '),  % Wie gibt man N Leerzeichen aus ? Eines hinschreiben ...
  73.           N1 is N - 1,
  74.           tab(N1).   % ... und nochmal N-1 Leerzeichen ausgeben.
  75.  
  76. % (Wie man sieht, ist Prolog nichts für diejenigen, die zusammenzucken,
  77. %  wenn sie das Wort "Rekursion" hören - solche Leute gibt es, ich treffe
  78. %  jeden Tag welche !)
  79.  
  80. end.
  81.  
  82.